//  浮点数在计算机内部的存储
//  任意一个   二进制  浮点数都可以写成如下形式
//  (-1)^S*M*2^E  -1的 s次方 *M *二的E次方   这里的  ^ 不表示  按位异或

//  (-1)^S  表示符号位  S 是 0 or 1， 表示 正 或 负     M 是 大于等于1  小于2，M表示有效数字      2^E表示有效数位

//
//  浮点数的二进制表示
//  例如 V=5.0f  表示5.0(十进制下的5.0)可以表示为  101.0   (分为整数部分和小数部分来表示)
// 101.0  (小数点可浮动)  可写成 1.01*2^2  (2^2   二的二次方)     类比十进制的科学计数法
// 再加工  (-1)^0*1.01*2^2
//        s=-1    M=10.1    E=3

// 再例如  V=9.5  的二进制序列   1001.1    1*2^3+0*2^2+0*2^1+1*2^0+1*2^(-1) = 8+0+0+1+0.5 = 9.5
//  应当按照权重换算   1001.1 = (-1)^0*1.0011*2^3
//                             s=-1   M=1.0011  E=3

// V=9.6f
// 二进制表示为 1001.101.......    等等     用  2^(-n) 的和来凑那个   0.6   0.5   0.7…………等等
// 但由于  float   就  就四个字节八个比特位   double 也才8个字节 64 个比特位，所以，在   “ 凑 ” 的时候出现了位数丢失导致不准
// 直接存会存在数据丢失    因此 IEEE754 规定存储浮点数的 S M E 的值，就能在使用的时候还原出来浮点数的值
//

// 另外对 M 和 E 还有特殊的规定
// 对于 M， 计算机在保存 M 的时候,默认这个数的第一位总是 1 ， 只保留小数点后面的内容，在取出来的时候，加上1即可 ，这样就为有效位的存储增加了以为有效数字，可以提高精确度  ( 从23 位增加到了24位)

// 对于 E 情况较为复杂
// 首先E是一个无符号数   表示E是正数  若E是8位  则为 0 ~ 255   11位  则为   0 ~ 2047
//    但是  在真实情况中 E 完全有可能会是负的  ; 因此  IEEE规定   转入内存时  E的真实值必须再加上一个数字
// 对于32位的浮点数  加上127   64为的浮点数  加上 1023
// 101.1   (5.5所对应的二进制序列)
// s=0  M = 1.011   E = 2      1.011* 2^2
// 32位浮点数  第一位 存 符号位 0     中间八位存M  存的时候略去小数点前面的1  后面23位存E
// 0(符号)  10000001(精度)  01100000000000000000000(内容)
// 0 E+127 M
// 0100 0000 1011 0000 0000 0000 0000 0000
// 4    0    b    0    0    0    0    0
// 40 b0 00 00    -> 小端存储   内存中存的是  00 00 b0 40
// 此时存入啦

//  取出规则
// 从内存中取出再分为3种情况   根据内存中存的E(二进制)  分为了三种情况

// 情况1
//  E不为全0  或E不为全1
// 怎么放怎么取
// 0(符号)  10000001(精度)  01100000000000000000000(内容)      这是放入的内容(二进制序列)
// 取出时
// (-1)^0 * 1.01100000000000000000000 * (129-127)*2^     或者(二进制序列对应的十进制数-1023)      这样计算后得到  所存储的浮点数对应的二进制序列

// 情况2
// E全是 1
